package models

import (
	"shop/pkg/global"
	"strings"
)

type NewArticle struct {
	Title    string `json:"title"`
	Content  string `json:"content"`
	CateId   int64  `json:"cate_id"`
	Author   string `json:"author"`
	Image    string `json:"image"`
	Synopsis string `json:"synopsis"`
	Visit    int    `json:"visit"`
	Sort     int    `json:"sort"`
	Url      string `json:"url"`
	Status   int    `json:"status"`
	IsDel    int    `json:"is_del"`
	BaseModel
}

func GetAllArticle(pageNum int, pageSize int, maps map[string]interface{}) (int64, []NewArticle) {
	var (
		total int64
		data  []NewArticle
	)
	// 初始化查询对象
	db := global.Db.Model(&NewArticle{})
	// 遍历 maps 中的每个查询条件
	for key, value := range maps {
		// 查询方式一 ，like =
		// if strings.Contains(key, "LIKE ?") {
		// 	// 处理 LIKE 查询
		// 	field := strings.Replace(key, "LIKE ?", "", 1)
		// 	db = db.Where(field+"LIKE ?", value)
		// } else {
		// 	// 普通的等值查询
		// 	db = db.Where(key+" = ?", value)
		// }

		//查询方式二 %新闻标题%
		switch {
		case strings.HasSuffix(key, "_like"):
			// 使用 _like 后缀表示模糊查询
			field := strings.TrimSuffix(key, "_like")
			db = db.Where(field+" LIKE ?", value)
		case strings.HasSuffix(key, "_eq"):
			// 使用 _eq 后缀表示精确查询（明确指定）
			field := strings.TrimSuffix(key, "_eq")
			db = db.Where(field+" = ?", value)
		default:
			// 默认使用精确查询
			db = db.Where(key+" = ?", value)
		}
	}

	db.Count(&total)
	db.Offset(pageNum).Limit(pageSize).Order("id desc").Find(&data)
	return total, data
}

func GetAllArticleBack(pageNum int, pageSize int, maps map[string]interface{}) (int64, []NewArticle) {
	var (
		total int64
		data  []NewArticle
	)
	//db := global.Db.Model(&NewArticle{})

	global.Db.Model(&NewArticle{}).Where(maps).Count(&total)
	global.Db.Where(maps).Offset(pageNum).Limit(pageSize).Order("id desc").Find(&data)
	return total, data
}

func AddnewArticle(m *NewArticle) error {
	var err error
	if err = global.Db.Create(m).Error; err != nil {
		return err
	}
	return err
}

// 修改新闻
func UpdateByNewArticle(m *NewArticle) error {
	var err error
	err = global.Db.Omit("create_time").Save(m).Error
	if err != nil {
		return err
	}
	return err
}

func DelByNewArticle(ids []int64) error {
	var err error
	err = global.Db.Where("id in (?)", ids).Delete(&NewArticle{}).Error
	if err != nil {
		return err
	}
	return err
}
